package com.at.c01_linking;

/**
 * 反编译：cd target/classes/com/at/java
 * javap -v StackStruTest.class
 *
 * @author huangchao E-mail:fengquan8866@163.com
 * @version 创建时间：2024/6/21 22:03
 */
public class StackStruTest {
    public static void main(String[] args) {
        add1();
        add2();
        add3();
    }

    public static void add1() {
        int i = 2 + 3; // 0: iconst_5
    }

    public static void add2() {
        int i = 2; // 0: iconst_2  // 将整数常量 2 推送到操作数栈上
        // 1: istore_1 将操作数栈顶部的int类型值（即一个32位整数）存储到局部变量表的第二个位置（索引为1的位置）

        int j = 3; // 2: iconst_3
        // 3: istore_2

        int k = i + j; // 4: iload_1 从局部变量表的索引 0 位置加载 int 值到操作数栈
        // 5: iload_2
        // 6: iadd 执行加法运算
        // 7: istore_3
    }

    public static int add3() {
        int a = 100;  // 0: bipush        100
        // 2: istore_0

        int b = 200; // 3: sipush        200
        // 6: istore_1

        int c = 300; // 7: sipush        300
        // 10: istore_2

        // 11: iload_0
        // 12: iload_1
        // 13: iadd
        // 14: iload_2
        // 15: imul
        // 16: ireturn
        return (a + b) * c;
    }

}
